/**
 * @file
 * @author  Tsin Smith <tsin.creator@gmail.com>
 *
 * @section DESCRIPTION
 *
 * Interface for top level argument lists.
 *
 */

#ifndef __TSIN_ARGUMENT_HPP__
#define __TSIN_ARGUMENT_HPP__

#include <tsin/common.hpp>
#include <string>

namespace tsin {

        class Argument
        {
        public:
                /**
                 * Get size of the argument list.
                 *
                 * @return An integer indicating the size of the list
                 */
                virtual int size() = 0;

                /**
                 * Get a specific argument.
                 *
                 * @param index The index used to speficy a particular argument.
                 *        start from 0.
                 *
                 * @return The argument speficied in C-style string.
                 *         NULL if the index is underflows or overflows.
                 */
                virtual char *getArgument(int index) = 0;

                virtual bool getOption(char shortName, const char *longName, char *opt) = 0;
                virtual bool getOption(char shortName, const char *longName, int &opt) = 0;
        };

}

#endif /* __TSIN_ARGUMENT_HPP__ */
